// 工具库
export const util = {

	//	配置参数
	config: {
		//	接口域名
		host: 'http://es.yvlibo.com',
		// host: 'http://192.168.238.48:7575',
		// 上传文件接口地址
		upload_file_api: "/api/common/upload",
	},

	// 弹窗
	alert(obj) {
		//	这个地方说白了就是 如果只是想提示一句话一个文本的话 就只是弹个小tips
		if (typeof obj == "string" || typeof obj == "number") {
			uni.showToast({
				'title': "" + obj + "",
				'icon': 'none',
				duration: 3000,
			});
			return;
		}
		//	标题
		obj.title = obj.title ? obj.title : "";

		//	提示内容
		obj.value = obj.value ? obj.value : "";

		//	跳转页面
		obj.url = obj.url ? obj.url : "";

		//	确定文本
		obj.confirmText = obj.confirmText ? obj.confirmText : "确定";

		//	取消按钮
		obj.cancel = obj.cancel === false ? false : true;

		//	是否关闭当前页面
		obj.close = obj.close ? obj.close : false;

		//	取消文本
		obj.cancelText = obj.cancelText ? obj.cancelText : "取消";

		//	调起
		uni.showModal({
			title: obj.title,
			content: obj.value,
			confirmText: obj.confirmText,
			showCancel: obj.cancel,
			cancelText: obj.cancelText,
			success: function(res) {
				obj.success ? obj.success(res) : function() {};
			}
		});

	},

	//	上传文件
	upload(obj) {

		//	使用promise写请求,一个函数两种回调
		return new Promise((resolve, reject) => {

			//	接口地址
			obj.url = obj.url ? obj.url : util.config.upload_file_api;

			//	文件
			obj.file = obj.file ? obj.file : "";

			//	附加数据
			obj.data = obj.data ? obj.data : {};

			//	设置token
			obj.data.token = uni.getStorageSync("token");

			//	打开loading效果
			uni.showLoading({
				title: "正在上传",
			})

			//	上传
			uni.uploadFile({
				url: util.config.host + obj.url,
				filePath: obj.file,
				name: 'file',
				formData: obj.data,
				dataType: 'json',
				success(res) {

					//	关闭loading效果
					uni.hideLoading()

					//	成功
					obj.success ? obj.success(JSON.parse(res.data)) : function() {};

					//	
					resolve(res);

				},
				fail(res) {

					uni.hideLoading();

					//	错误
					obj.fail ? obj.fail(res.data) : function() {};

					//	
					reject(res);

				}
			});

		})
	},

	//	发送网络请求
	request(params) {
		//	返回方法
		return new Promise((resolve, reject) => {
			//	请求地址
			var url = util.config.host + (params.url ? params.url : '/api/index/index');

			//	是否打开加载效果
			if (params.load) {
				uni.showLoading({
					title: "加载中",
				})
			}

			//	发起网络请求
			uni.request({

				//	请求地址
				url: url,

				//	请求方式 get/post
				method: params.type ? params.type : "POST",

				//	是否开启SSL验证
				sslVerify: false,

				//	请求参数
				data: params.data,

				//	header请求头
				header: {
					'Content-Type': 'application/x-www-form-urlencoded',
					token: uni.getStorageSync('token')
				},

				//	数据类型
				dataType: 'json',

				//	请求成功返回
				success(res) {
					//	关闭加载效果
					if (params.load) {
						uni.hideLoading()
					}

					//	嵌套式回调
					params.success ? params.success(res.data) : function() {};

					//	链式回调
					resolve(res.data);
				},
				//	请求失败返回
				fail(res) {
					//	关闭加载效果
					if (params.load) {
						uni.hideLoading()
					}

					//	嵌套式回调
					params.fail ? params.fail(res) : function() {};

					//	链式回调
					reject(res)
				},
				complete() {
					//	嵌套式回调
					params.complete ? params.complete() : function() {};

				},
			})
		})
	},

	//	替换图片的宽度为最大宽度100% (移动端解析html富文本专用)
	imgReplace(value, th) {

		var _self = this;

		if (!th) {
			value = value.replace(/<img src="/ig, '<img src="' + util.config.host);
		}
		return value.replace(/<p([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<p')
			.replace(/<p>/ig, '<p style="font-size: 15px; line-height: 25px;">')
			.replace(/<img([\s\w"-=\/\.:;]+)((?:(height="[^"]+")))/ig, '<img$1')
			.replace(/<img([\s\w"-=\/\.:;]+)((?:(width="[^"]+")))/ig, '<img$1')
			.replace(/<img([\s\w"-=\/\.:;]+)((?:(style="[^"]+")))/ig, '<img$1')
			.replace(/<img([\s\w"-=\/\.:;]+)((?:(alt="[^"]+")))/ig, '<img$1')
			.replace(/<img([\s\w"-=\/\.:;]+)/ig, '<img style="width: 100%;" $1');
	},

	//	微信小程序分享转发
	wxShare(obj) {
		//	获取加载的页面
		var pages = getCurrentPages();

		//	获取当前页面的对象
		var currentPage = pages[pages.length - 1]

		//	地址
		var url = "/pages/index/index";

		//	如果存在页面对象
		if (obj) {
			url = "/" + currentPage.route;
		}

		//	当前页面的参数
		var options = currentPage.options;

		//	如果已经登录
		if (uni.getStorageSync("userinfo")) {
			options.pid = uni.getStorageSync("userinfo").id;
		}

		//	分享页面
		var url = util.setUrl(url, options);
		//	分享参数
		var share = {
			path: url,
		};
		// console.log('分享页参数', url);
		// console.log('分享页参数', share);
		// console.log('分享页参数',  currentPage.$vm.share);
		return currentPage.$vm.share ? currentPage.$vm.share : share;
	},

	//	get参数拼接
	setParam(data) {
		let url = '';
		for (var k in data) {
			let value = data[k] !== undefined ? data[k] : '';
			url += `&${k}=${value}`
		}
		return url ? url.substring(1) : ''
	},

	//	get参数拼接url
	setUrl(url, data) {
		return url += (url.indexOf('?') < 0 ? '?' : '') + util.setParam(data);
	},

	//	倒计时
	countDownd(endtime) {
		if (!endtime) {
			return;
		}

		endtime = Number(endtime);

		var timestamp = Date.parse(new Date()) / 1000;


		if (endtime > 100000) {
			//	距离结束的秒数
			var time = (endtime - timestamp);
		} else {
			var time = endtime;
		}

		// 获取天、时、分、秒
		let day = util.timeFormin(parseInt(time / (60 * 60 * 24)));
		let hou = util.timeFormin(parseInt(time % (60 * 60 * 24) / 3600));
		let min = util.timeFormin(parseInt(time % (60 * 60 * 24) % 3600 / 60));
		let sec = util.timeFormin(parseInt(time % (60 * 60 * 24) % 3600 % 60));

		var str = "";

		if (day) {
			str += day + "天";
		}

		if (hou || hou == 0) {
			if (hou > 9) {
				str += hou + ":";
			} else {
				str += "0" + hou + ":";
			}
		} else {
			str += "00:";
		}

		if (min || min == 0) {
			if (min > 9) {
				str += min + ":";
			} else {
				str += "0" + min + ":";
			}
		} else {
			str += "00:";
		}

		if (sec) {
			if (sec > 9) {
				str += sec;
			} else {
				str += "0" + sec;
			}
		} else {
			str += "00";
		}

		return str;

	},

	//	格式化时间
	timeFormin(param) {
		return param < 0 ? 0 : param;
	},

	/*
	 * 上传图片
	 * @param{field}	object		操作图片的对象键值
	 * @param{type}		number		1 单张图	 2多图 3头像
	 * @param{form}		string		操作图片的父级对象
	 * @param{imgCount}	number		图片计数
	 * @param{fn}		function	方法.
	 */
	img(field, type, form, imgCount = 9, fn) {

		// 如果没有
		if (!form[field]) {
			form[field] = type == 2 ? [] : "";
		}

		// 判断是否多图
		if (type == 2) {
			// 判断剩余图片上传个数
			if (form[field].length >= imgCount) {
				// 弹窗提示
				util.alert('上传图片已达上限');
				return;
			};
		}

		// 选择图片
		uni.chooseImage({
			// 限制图片
			count: type == 2 ? (imgCount - form[field].length) : 1,
			success(rs) {
				// 遍历图片返回列表
				rs.tempFilePaths.forEach(item => {
					// 调用上传图片
					util.upload({
						file: item,
						success(res) {
							// 上传成功
							if (res.code == 1) {
								// 如果没有自定义方法
								if (!fn) {
									// 判断是否有空数组
									// if (!form.img) {
									// 添加空数组
									// form.img = [];
									// };

									// 判断类型
									if (type == 2) {
										// 添加短路径图片
										// form.img.push(res.data.url);
										// 添加长路径图片
										form[field].push(res.data.fullurl);
									} else {
										// 添加短路径图片
										// form.img = res.data.url;
										// 添加长路径图片
										form[field] = res.data.fullurl;
									}

									// 重新赋值 刷新页面
									form = Object.assign({}, form);

									console.log(form)

								} else {
									return fn(res) ? fn(res) : (res) => {};
								}
							}
						},
					})
				});
			}
		})
	},

	// 获取用户信息
	getuserinfo(fn, load) {
		// 请求接口
		util.request({
			url: '/api/user/index',
			load: load ? load : false,
			success(rs) {

				if (rs.code == 1) {
					// 返回方法
					return fn(rs) ? fn(rs) : (rs) => {};
				} else if (rs.code == 401) {
					// 清除缓存
					uni.removeStorageSync('token');

					// 跳转页面
					uni.navigateTo({
						url: '/pages/login',
					});
				} else {
					util.alert(rs.msg);
				}
			}
		})
	},

	// 选择位置
	chooseLocation(fn) {
		// 获取权限
		uni.authorize({
			// 地理位置
			scope: 'scope.userLocation',
			// 成功
			success(res) {
				// 选择地址
				uni.chooseLocation({
					success(rs) {
						return fn(rs) ? fn(rs) : (rs) => {};
					},
					fail(rs) {
						// 弹窗提示
						util.alert('您取消了选择');
					}
				});
			},
			// 失败
			fail(res) {
				// 弹窗
				util.alert({
					value: "小程序需要获取您的位置",
					success(rs) {
						if (rs.confirm) {
							uni.openSetting();
						}
					}
				})
			}
		})
	},

	// 收藏商品
	collect(obj) {
		// 请求接口 
		util.request({
			url: '/api/common/action',
			// 上传数据
			data: obj.data,
			load: 1,
			// 调用成功
			success(rs) {
				// 返回成功
				if (rs.code == 1) {
					obj.success(rs) ? obj.success(rs) : (rs) => {};
				} else {
					obj.error(rs) ? obj.error(rs) : (rs) => {};
					//弹窗提示用户
					util.alert(rs.msg);
				}
			},
			complete() {
				return obj ? obj : {};
			},
		})
	},

	//	吊起支付
	payment(obj) {
		//	参数必须是对象
		obj = obj ? obj : {};
		obj.url = obj.url ? obj.url : "";
		obj.data = obj.data ? obj.data : {};
		obj.data.id = obj.data.id ? obj.data.id : "";
		obj.data.paytype = obj.data.paytype ? obj.data.paytype : "wechat";
		obj.data.method = obj.data.method ? obj.data.method : "miniapp";

		//	调试模式
		obj.debug ? console.log(obj) : "";

		//	发起网络请求
		util.request({
			url: obj.url,
			data: obj.data,
			load: true,
			success(rs) {

				if (rs.code == 1) {

					//	调试模式
					obj.debug ? console.log(rs.data) : "";


					//	根据对应类型吊起支付
					switch (obj.data.paytype) {

						//	微信支付
						case "wechat":

							switch (obj.data.method) {

								//	小程序支付
								case "miniapp":

									if (rs.data && rs.data.paySign) {
										uni.requestPayment({
											provider: "wxpay",
											timeStamp: rs.data.timeStamp,
											package: rs.data.package,
											nonceStr: rs.data.nonceStr,
											paySign: rs.data.paySign,
											signType: rs.data.signType,
											success(result) {

												//	调试模式
												obj.debug ? console.log(result) : "";

												// 完成
												obj.complete ? obj.complete(rs) : () => {};

												//
												return obj.success ? obj.success(result) :
													function() {};
											},
											fail(result) {

												//	调试模式
												obj.debug ? console.log(result) : "";

												//
												return obj.error ? obj.error(result) :
													function() {};
											}
										})
									} else {

										//
										return obj.success ? obj.success() : function() {};

									}

									break;

									//	app支付
								case "app":
									uni.requestPayment({
										provider: "wxpay",
										orderInfo: rs.data,
										success(result) {
											//	调试模式
											obj.debug ? console.log(result) : "";
											//
											return obj.success ? obj.success(result) :
												function() {};
										},
										fail(result) {
											//	调试模式
											obj.debug ? console.log(result) : "";
											//
											return obj.error ? obj.error(result) : function() {};

										}
									})
									break;
							}
							break;

							//	支付宝支付
						case "alipay":

							switch (obj.data.method) {

								//	app支付
								case "app":
									uni.requestPayment({
										provider: "alipay",
										orderInfo: rs.data,
										success(result) {

											//	调试模式
											obj.debug ? console.log(result) : "";

											//
											return success ? success(result) : function() {};

										},
										fail(result) {

											//	调试模式
											obj.debug ? console.log(result) : "";

											//
											return error ? error(result) : function() {};

										}
									})
									break;

							}

							break;

							//	余额支付
						case "money":

							return obj.success ? obj.success() : function() {};

							break;

							//	积分支付
						case "score":

							return obj.success ? obj.success() : function() {};

							break;

					}

				} else {
					util.alert(rs.msg);
				}

			}
		})
	},

	/*
	 * 改变推销订单状态
	 * obj			传参
	 * that			this指向
	 * fn			需要操作的事件
	 * nodel		拒绝删除
	 */
	changeStatus(obj, that, fn, nodel) {
		// 单项
		// var wrap = that.wrap.list[that.target];

		// 判断有无列表
		if (that.wrap.list) {
			var wrap = that.wrap.list[that.target];
		} else {
			var wrap = that.wrap;
		}

		// 提交数据
		var data = {
			// 需要操作的id
			ids: wrap.id,
		};

		// 判断有无订单状态
		obj.status ? data.status = obj.status : '';

		// 判断有无合作比例
		obj.ratio ? data.ratio = obj.ratio : '';

		// 判断有无异议
		obj.state ? data.state = obj.state : '';

		// 请求接口 
		util.request({
			url: '/api/promote/changeStatus',
			// 上传数据
			data: data,
			// 调用成功
			success(rs) {
				// 返回成功
				if (rs.code == 1) {
					// 弹窗提示
					util.alert('操作成功');

					// 赋值更改的状态
					wrap.status = obj.status;

					// 赋值异议状态
					wrap.state = obj.state;

					// 状态文字
					wrap.status_text = rs.data.status_text;

					// 判断当前是列表
					if (that.wrap.list) {
						// 判断当前列表是否全部
						if (that.current != 0) {
							// 是否删除
							if (!nodel) {
								// 删除列表
								that.wrap.list.splice(that.target, 1);

								// 清空下标
								that.target = '';
							}
						} else {
							// 更改状态文字
							that.wrap.list[that.target].status_text = rs.data.status_text;
						}
					} else {
						// 更改标题
						uni.setNavigationBarTitle({
							title: rs.data.status_text,
						})
					}

					// 重新赋值刷新页面
					that.wrap = Object.assign({}, that.wrap);

					// 执行方法
					return fn(rs) ? fn(rs) : (rs) => {};
				} else {
					//弹窗提示用户
					util.alert(rs.msg);
				}
			}
		})
	},





	/*
	 * 改变订单状态
	 * obj		参
	 * that		this指向
	 */
	changeOrder(obj, that) {
		// 判断有无列表
		if (that.wrap.list) {
			var wrap = that.wrap.list[that.target];
		} else {
			var wrap = that.wrap;
		}

		// 请求接口 
		util.request({
			url: '/api/goods_order/changeStatus',
			// 上传数据
			data: obj.data,
			load: 1,
			// 调用成功
			success(rs) {
				// 返回成功
				if (rs.code == 1) {
					// 判断有无列表
					if (that.wrap.list) {
						var wrap = that.wrap.list[that.target];
					} else {
						var wrap = that.wrap;
					}

					// 判断当前是列表
					if (that.wrap.list) {
						// 判断当前列表是否全部
						if (that.current != 0) {
							// 删除列表
							that.wrap.list.splice(that.target, 1);

							// 清空下标
							that.target = '';
						} else {
							// 更改状态文字
							that.wrap.list[that.target].status = obj.data.status;
							// 更改状态文字
							that.wrap.list[that.target].status_text = rs.data.status_text;
						}
					} else {
						// 判断内容
						if (rs.data) {
							// 判断状态
							if (rs.data.status_text) {
								// 更改标题
								uni.setNavigationBarTitle({
									title: rs.data.status_text,
								})

								// 订单详情
								that.order_detail ? that.order_detail() : '';
							}
						}
					}

					// 重新赋值刷新页面
					that.wrap = Object.assign({}, that.wrap);

					// 返回方法
					return obj.success(rs) ? obj.success(rs) : (rs) => {};
				} else {
					//弹窗提示用户
					util.alert(rs.msg);
				}
			}
		})
	},

	// 微信小程序登录
	weChatLogin(obj) {
		uni.getUserProfile({
			desc: "weixin",
			success(e) {
				console.log(e);
				//	定义用户数据
				var data = e.userInfo;

				//	调用登录
				uni.login({
					provider: "weixin",
					success(rs) {
						console.log('用户信息', rs);
						//	追加
						data.userInfo = JSON.stringify(e.userInfo);
						data.code = rs.code;
						data.platform = "wechatMini";

						// 判断有无pid
						if (uni.getStorageSync('pid')) {
							data.pid = uni.getStorageSync('pid');
						}

						//	如果获得code
						if (rs.errMsg == "login:ok") {

							util.request({
								url: "/api/user/third",
								data: data,
								success(res) {
									//	如果操作成功
									if (res.code == 1) {
										//	弹窗
										util.alert("登录成功");

										//	设置用户身份令牌
										uni.setStorageSync("token", res.data.userinfo
											.token);

										//
										uni.setStorageSync("userinfo", res.data.userinfo);

										// 判断用户是否绑定了手机号
										if (!res.data.userinfo.mobile) {
											// 关闭跳转
											// 跳转页面
											uni.navigateTo({
												url: '/pages/my/binding',
											})

											return;
										}

										// 成功
										return obj.success(res) ? obj.success(res) : (
											res) => {};
									}
								}
							})
						}
					},
				})
			},

			fail(res) {
				util.alert("您拒绝了授权");

				// 失败
				return obj.fail(res) ? obj.fail(res) : (res) => {};
			},
			// 结束后执行
			complete() {
				// 失败
				return obj.complete() ? obj.complete() : () => {};
			},
		});
	},
}
